<?php

namespace App\Http\Controllers;

use App\Http\Models\Message;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Redis;
use QL\QueryList;// use 前提需要composer安装 composer require jaeger/querylist

/**
 * 自测题设计的知识点
 * 安装laravel框架、配置虚拟域名
 *
 * 采集工具的使用
 * 第一步：安装扩展 composer require jaeger/querylist
 * 第二步：配置规则、采集地址、切割区域
 * 第三步：获取数据、入库（如果入库不成功、手动在数据表添加数据）
 * 列表展示
 * 第一次查询数据库、存储redis set()
 * 第二次访问、读取缓存 get()
 * 详情页面
 * 第一次查询数据库、生成静态页面 file_put_contents()向文件中写入内容
 * 第二次、读取静态文件即可 file_get_contents()获取文件内容
 * 删除数据
 * 考虑删除缓存（del）、删除静态文件（unlink删除文件）
 * Class MessageController
 * @package App\Http\Controllers
 */

class MessageController extends Controller
{
    /**
     * 采集数据
     */
    public function queryList(){
        $range = "#js-list li";//切割选择器
        $rules = [
            'title' => ['.a-t-title','text'],//找标题
            'content' => ['.h-a-content','text'],//找内容
            'author' => ['.h-a-tips','text'],//作者
            'create_time' => ['.a-f-date span:eq(0)','text'],//创建时间
            'like_number' => ['.a-f-date span:eq(3)','text'],//点赞数量
        ];//采集的规则

        $url = "https://www.haodf.com/citiao/jibing-shimian.html?p=3";//采集的地址
        $data  =QueryList::get($url)->rules($rules)->range($range)->queryData();

        $result = Message::insert($data);
        if ($result) {
            return redirect('/list');
        }
//        print_r($data);die();
    }

    /**
     * 数据列表
     */
    public function list(Request $request){
        // 列表页面使用redis
//        12.列表数据使用缓存进行优化
        // 需要安装扩展 composer require predis/predis
        // 没有使用缓存之前 直接查询数据库
        // 第二次访问、读取缓存、不需要读取数据
        $page = $request->input('page',1);//默认第一页

        $cache_data = Redis::get('data_'.$page);
        if (!empty($cache_data)) {
            $data = unserialize($cache_data);// 反序列化
            echo "缓存中有数据";
        } else {
            echo "缓存中没有数据";
            // 使用缓存进行优化 第一次 读取数据库 存储缓存
            $data = Message::paginate(5);
            Redis::set('data_'.$page,serialize($data));//存的时候序列化、简单的理解、就是转化为一个字符串
        }

        return view('list',['data' => $data]);
    }

    /**
     * 详情
     */
    public function detail(Request $request){
        $id = $request->get('id');
        //更新阅读量
        $info = Message::find($id);
        $info->like_number = $info->like_number +1;
        $info->save();

        //        15.第二次及以后访问详情页面时，直接读取纯静态文件
        if (file_exists('detail_'.$id.'.html')) {
            echo "存在静态文件";
            $content = file_get_contents('detail_'.$id.'.html');
        } else {
            echo "不存在、查询数据库、生成静态文件";
            //        14.第一次访问详情页时，从mysql读取，，生成纯静态文件
            $detail  = Message::find($id);
            $content =  view('detail',['detail' => $detail]);
         //  生成纯静态文件
            file_put_contents('detail_'.$id.'.html',$content);
        }

        return $content;

    }

    /**
     * 删除数据
     */
    public function delete(Request $request){
        $id = $request->get('id');
        if (!is_numeric($id)) {
            return "Id参数错误";
        }
        $isExist = Message::find($id);
        if (empty($isExist)) {
            return  "数据库中不存在";
        }

        $isExist->delete();//删除数据

        // 删除缓存的数据
        $page = $request->input('page',1);//默认第一页
        Redis::del('data_'.$page);

        // 删除静态文件
        unlink('detail_'.$id.'.html');
        return  redirect('/list');//删除成功
    }
}
